home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / Timing / EngClock96.lha / EngClock96 / Source / engclock_prefs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-24  |  30.8 KB  |  1,074 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : -- Unnamed --
  6.  */
  7.  
  8. #include <exec/types.h>
  9. #include <intuition/intuition.h>
  10. #include <intuition/classes.h>
  11. #include <intuition/classusr.h>
  12. #include <intuition/imageclass.h>
  13. #include <intuition/gadgetclass.h>
  14. #include <libraries/gadtools.h>
  15. #include <graphics/displayinfo.h>
  16. #include <graphics/gfxbase.h>
  17. //#include <proto/exec.h>
  18. //#include <proto/intuition.h>
  19. //#include <proto/gadtools.h>
  20. //#include <proto/graphics.h>
  21. //#include <proto/utility.h>
  22. //#include <proto/dos.h>
  23. #include <string.h>
  24. #include <stdio.h>
  25. #include <dos/dos.h>
  26. //#include <proto/asl.h>
  27. #include <libraries/asl.h>
  28. #include <clib/asl_protos.h>
  29. #include <clib/exec_protos.h>
  30. #include <clib/intuition_protos.h>
  31. #include <clib/gadtools_protos.h>
  32. #include <clib/graphics_protos.h>
  33. #include <clib/utility_protos.h>
  34. #include <clib/dos_protos.h>
  35. #include <dos/dostags.h>
  36.  
  37. #include "EngClock_Prefs.h"
  38.  
  39. #define PREFS_FILE "s:engclock.prefs"
  40. #define VERS 1 /* Version for backwards compat */
  41. #define ID "EngCPrefs"
  42. #define ENGLISH 1
  43. #define FRENCH 2
  44. #define SPANISH 3
  45.  
  46. short displevel(int code);
  47. short drawspecial(void);
  48. BOOL handlepgadgets(int iaddress, int code);
  49. short writeprefs(void);
  50. char *callasl(struct Window *win, char *title, char *initialdir);
  51. void adaptlanguage(void);
  52. void convertdate(int code);
  53. int prefsgui(void);
  54.  
  55. BPTR handle2;
  56. BOOL exit_flag2=FALSE;
  57. char buffer[400];
  58.  
  59. extern struct Window *win_p;
  60. extern struct TextAttr font1;
  61. extern struct Screen *pubscreen;
  62. extern char *publister(void);
  63. extern void msg(char *msg);
  64. extern void getdate(void);
  65. extern int language;
  66. extern BOOL locale;
  67.  
  68. extern struct Library *AslBase;
  69. extern struct IntuitionBase *IntuitionBase;
  70. extern struct GfxBase *GfxBase;
  71. extern struct Library *UtilityBase;
  72. extern struct Library *GadToolsBase;
  73. extern struct Library *DiskfontBase;
  74. extern struct Library *IFFParseBase;
  75. extern struct Library *DataTypesBase;
  76. extern struct Library *TranslatorBase;
  77. extern struct Library *DOSBase;
  78.  
  79. char time1[50], time2[50];
  80.  
  81. int preset=1; /* Current preset for alarm events */
  82.  
  83. struct IntuiText level_text= {
  84.    1,0,JAM1,295,134,&font1,NULL,NULL };
  85.  
  86.  
  87. struct Event {
  88.     BOOL used;
  89.     int type;    /* Type of event */
  90.     int hours;    /* Time of event */
  91.     int minutes;
  92.     int timecode;
  93.     char message[256];
  94.     int day;
  95.     int month;
  96.     int year;
  97.     BOOL enabledate;
  98.     int freq;
  99. };
  100.  
  101. extern struct {
  102. /* Prefs structure used for preferences file format */
  103.  
  104.    char header[10];  /* I.D. Header */
  105.    int vers;         /* Version of preferences file */
  106.    int x;            /* X dimension of window when saved */
  107.    int y;            /* Y dimension of window when saved */
  108.    int width;        /* Width of window when saved */
  109.    int height;       /* Height of window when saved */
  110.    int planguage;    /* Language selected (menu) when saved, low pri */
  111.    int just;         /* Justification of text, 0=Left, 1=Centre, 2=Right */
  112.    short date;       /* Display date?, 0 = No, 1=Yes */
  113.    short wtf;         /* Window to front ? */
  114.    int time_col[8];
  115.    int date_col[8];
  116.    short autoadjust;       /* Use automatic adjustment on window ? */
  117.    char backdrop[256];  /* Backdrop image */
  118.    char pub[139];            /* Default public screen */
  119.     char accent[256];        /* Language file for tRanslate */
  120.     char tkey[100];
  121.     char hkey[100];
  122.     struct Event events[11];  /* For the alarm! */
  123.  
  124. }prefs;
  125.  
  126. int current_mode=2; /* Current selected colour mode */
  127.  
  128. APTR                   VisualInfo = NULL;
  129. struct Window         *Project0Wnd = NULL;
  130. struct Gadget         *Project0GList = NULL;
  131. struct Gadget         *Project0Gadgets[27];
  132. extern Class          *initGet( void );
  133. struct IClass         *getClass = NULL;
  134. struct _Object        *getImage = NULL;
  135. UWORD                  Project0Left = 0;
  136. UWORD                  Project0Top = 0;
  137. UWORD                  Project0Width = 560;
  138. UWORD                  Project0Height = 245;
  139. UBYTE                 *Project0Wdt = (UBYTE *)"EngClock Prefs";
  140.  
  141. UBYTE *Lang0Labels[] = {
  142.     (UBYTE *)"English",
  143.     (UBYTE *)"Français",
  144.     (UBYTE *)"Español",
  145.     NULL };
  146.  
  147. UBYTE *Just0Labels[] = {
  148.     (UBYTE *)"Left",
  149.     (UBYTE *)"Centre",
  150.     (UBYTE *)"Right",
  151.     NULL };
  152.  
  153. UBYTE *Type0Labels[] = {
  154.     (UBYTE *)"Requester",
  155.     (UBYTE *)"IFF-8SVX Sound",
  156.     (UBYTE *)"AmigaDOS Command",
  157.     (UBYTE *)"Speech",
  158.     NULL };
  159.  
  160. struct TextAttr topaz8 = {
  161.     ( STRPTR )"topaz.font", 8, 0x00, 0x01 };
  162.  
  163. struct IntuiText Project0IText[] = {
  164.     1, 0, JAM1,213, 6, &topaz8, (UBYTE *)"Language:-", &Project0IText[1],
  165.     1, 0, JAM1,20, 6, &topaz8, (UBYTE *)"Justification:-", &Project0IText[2],
  166.     1, 0, JAM1,378, 6, &topaz8, (UBYTE *)"Alarm Settings:-", NULL };
  167.  
  168. UWORD Project0GTypes[] = {
  169.     SLIDER_KIND,
  170.     BUTTON_KIND,
  171.     BUTTON_KIND,
  172.     SLIDER_KIND,
  173.     SLIDER_KIND,
  174.     CHECKBOX_KIND,
  175.     MX_KIND,
  176.     MX_KIND,
  177.     CHECKBOX_KIND,
  178.     CHECKBOX_KIND,
  179.     STRING_KIND,
  180.     STRING_KIND,
  181.     GENERIC_KIND,
  182.     GENERIC_KIND,
  183.     SLIDER_KIND,
  184.     TEXT_KIND,
  185.     TEXT_KIND,
  186.     SLIDER_KIND,
  187.     CYCLE_KIND,
  188.     STRING_KIND,
  189.     CHECKBOX_KIND,
  190.     BUTTON_KIND,
  191.     GENERIC_KIND,
  192.     STRING_KIND,
  193.     GENERIC_KIND,
  194.     STRING_KIND,
  195.     STRING_KIND
  196. };
  197.  
  198. struct NewGadget Project0NGad[] = {
  199.     89, 123, 184, 11, (UBYTE *)"Colours", NULL, GD_ColourSlider, PLACETEXT_LEFT, NULL, NULL,
  200.     9, 226, 106, 14, (UBYTE *)"Save", NULL, GD_But_Use, PLACETEXT_IN, NULL, NULL,
  201.     438, 226, 106, 14, (UBYTE *)"Use", NULL, GD_But_Cancel, PLACETEXT_IN, NULL, NULL,
  202.     111, 105, 102, 13, (UBYTE *)"Time Colour", NULL, GD_Time_Colour, PLACETEXT_LEFT, NULL, NULL,
  203.     113, 89, 100, 13, (UBYTE *)"Date Colour", NULL, GD_Date_Colour, PLACETEXT_LEFT, NULL, NULL,
  204.     164, 72, 26, 11, (UBYTE *)"Display Date", NULL, GD_Check_Date, PLACETEXT_RIGHT, NULL, NULL,
  205.     278, 21, 17, 9, NULL, NULL, GD_Lang, PLACETEXT_LEFT, NULL, NULL,
  206.     19, 23, 17, 9, NULL, NULL, GD_Just, PLACETEXT_RIGHT, NULL, NULL,
  207.     16, 61, 26, 11, (UBYTE *)"Auto adjust", NULL, GD_Check_Auto, PLACETEXT_RIGHT, NULL, NULL,
  208.     164, 59, 26, 11, (UBYTE *)"WindowToFront", NULL, GD_WinFront, PLACETEXT_RIGHT, NULL, NULL,
  209.     118, 141, 162, 14, (UBYTE *)"Public Screen", NULL, GD_Pub, PLACETEXT_LEFT, NULL, NULL,
  210.     76, 159, 203, 14, (UBYTE *)"Backdrop", NULL, GD_Back, PLACETEXT_LEFT, NULL, NULL,
  211.     282, 141, 20, 14, NULL, NULL, GD_Pub_Get, 0, NULL, NULL,
  212.     282, 159, 20, 14, NULL, NULL, GD_Asl_Get, 0, NULL, NULL,
  213.     387, 33, 106, 11, (UBYTE *)"Event number", NULL, GD_A_Preset, PLACETEXT_ABOVE, NULL, NULL,
  214.     334, 73, 201, 13, (UBYTE *)"Time of event", NULL, GD_Time1, PLACETEXT_ABOVE, NULL, NULL,
  215.     334, 87, 201, 13, NULL, NULL, GD_Time2, 0, NULL, NULL,
  216.     333, 103, 201, 12, NULL, NULL, GD_Time_Set, 0, NULL, NULL,
  217.     335, 131, 201, 15, (UBYTE *)"Type of event", NULL, GD_Type, PLACETEXT_ABOVE, NULL, NULL,
  218.     334, 162, 185, 14, (UBYTE *)"Parameter", NULL, GD_Msg, PLACETEXT_ABOVE, NULL, NULL,
  219.     339, 47, 26, 11, (UBYTE *)"Enable Event", NULL, GD_Enable, PLACETEXT_RIGHT, NULL, NULL,
  220.     480,47, 60,11,(UBYTE *)"Date",NULL,GD_Date,PLACETEXT_IN,NULL,NULL,
  221.     524,162,20,14,NULL,NULL,GD_GetParam,0,NULL,NULL,
  222.     134,183,384,14,(UBYTE *)"Accent Filename",NULL,GD_Accent,PLACETEXT_LEFT,NULL,NULL,
  223.     524,183,20,14,NULL,NULL,GD_GetAccent,0,NULL,NULL,
  224.     126,202,150,14,(UBYTE *)"Window hotkey",NULL,GD_HotKey,PLACETEXT_LEFT,NULL,NULL,
  225.     392,202,150,14,(UBYTE *)"Talky hotkey",NULL,GD_TalkKey,PLACETEXT_LEFT,NULL,NULL
  226.     
  227. };
  228.  
  229. ULONG Project0GTags[] = {
  230.     (GTSL_Max), 7, (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  231.     (TAG_DONE),
  232.     (TAG_DONE),
  233.     (GTSL_Max), 1, (PGA_Freedom), LORIENT_HORIZ, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (TAG_DONE),
  234.     (GTSL_Max), 1, (PGA_Freedom), LORIENT_HORIZ, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (TAG_DONE),
  235.     (TAG_DONE),
  236.     (GTMX_Labels), (ULONG)&Lang0Labels[ 0 ], (GTMX_Spacing), 3, (TAG_DONE),
  237.     (GTMX_Labels), (ULONG)&Just0Labels[ 0 ], (GTMX_Spacing), 2, (TAG_DONE),
  238.     (TAG_DONE),
  239.     (TAG_DONE),
  240.     (GTST_MaxChars), 139, (TAG_DONE),
  241.     (GTST_MaxChars), 256, (TAG_DONE),
  242.     (TAG_DONE),
  243.     (TAG_DONE),
  244.     (GTSL_Min), 1, (GTSL_Max), 10, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  245.     (GTTX_Border), TRUE, (TAG_DONE),
  246.     (GTTX_Border), TRUE, (TAG_DONE),
  247.     (GTSL_Min),1,(GTSL_Max), 576, (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  248.     (GTCY_Labels), (ULONG)&Type0Labels[ 0 ], (TAG_DONE),
  249.     (GTST_MaxChars), 256, (TAG_DONE),
  250.     (TAG_DONE),
  251.     (TAG_DONE),
  252.     (TAG_DONE),
  253.     (GTST_MaxChars), 256, (TAG_DONE),
  254.     (TAG_DONE),
  255.     (GTST_MaxChars), 100, (TAG_DONE)
  256. };
  257.  
  258. int SetupScreen( void )
  259. {
  260.     if ( ! ( VisualInfo = GetVisualInfo( pubscreen, TAG_DONE )))
  261.         return( 2L );
  262.  
  263.     if ( ! ( getClass = initGet()))
  264.         return( 3L );
  265.  
  266.     if ( ! ( getImage = NewObject( getClass, NULL, GT_VisualInfo, VisualInfo, TAG_DONE )))
  267.         return( 4L );
  268.  
  269.     return( 0L );
  270. }
  271.  
  272. void CloseDownScreen( void )
  273. {
  274.     if ( getImage   ) {
  275.         DisposeObject( getImage );
  276.         getImage = NULL;
  277.     }
  278.  
  279.     if ( getClass   ) {
  280.         FreeClass( getClass );
  281.         getClass = NULL;
  282.     }
  283.  
  284.     if ( VisualInfo ) {
  285.         FreeVisualInfo( VisualInfo );
  286.         VisualInfo = NULL;
  287.     }
  288.  
  289. }
  290.  
  291. void Project0Render( void )
  292. {
  293.     UWORD        offx, offy;
  294.  
  295.     offx = Project0Wnd->BorderLeft;
  296.     offy = Project0Wnd->BorderTop;
  297.  
  298.     PrintIText( Project0Wnd->RPort, Project0IText, offx, offy );
  299. }
  300.  
  301. int OpenProject0Window( void )
  302. {
  303.     struct NewGadget    ng;
  304.     struct Gadget    *g;
  305.     UWORD        lc, tc;
  306.     UWORD        offx = pubscreen->WBorLeft, offy = pubscreen->WBorTop + pubscreen->RastPort.TxHeight + 1;
  307.  
  308.     if ( ! ( g = CreateContext( &Project0GList )))
  309.         return( 1L );
  310.  
  311.     for( lc = 0, tc = 0; lc < Project0_CNT; lc++ ) {
  312.  
  313.         CopyMem((char * )&Project0NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  314.  
  315.         ng.ng_VisualInfo = VisualInfo;
  316.         ng.ng_TextAttr   = &topaz8;
  317.         ng.ng_LeftEdge  += offx;
  318.         ng.ng_TopEdge   += offy;
  319.  
  320.         Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );
  321.  
  322.         if ( Project0GTypes[ lc ] == GENERIC_KIND ) {
  323.             g->Flags             |= GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
  324.             g->Activation        |= GACT_RELVERIFY;
  325.             g->GadgetRender       = (APTR)getImage;
  326.             g->SelectRender       = (APTR)getImage;
  327.         }
  328.  
  329.         while( Project0GTags[ tc ] ) tc += 2;
  330.         tc++;
  331.  
  332.         if ( NOT g )
  333.             return( 2L );
  334.     }
  335.  
  336.     if ( ! ( Project0Wnd = OpenWindowTags( NULL,
  337.                 WA_Left,    Project0Left,
  338.                 WA_Top,        Project0Top,
  339.                 WA_Width,    Project0Width,
  340.                 WA_Height,    Project0Height + offy,
  341.                 WA_IDCMP,    SLIDERIDCMP|BUTTONIDCMP|CHECKBOXIDCMP|MXIDCMP|STRINGIDCMP|IDCMP_GADGETUP|TEXTIDCMP|CYCLEIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  342.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  343.                 WA_Gadgets,    Project0GList,
  344.                 WA_Title,    Project0Wdt,
  345.                 WA_ScreenTitle,    "EngClock Prefs",
  346.                 WA_PubScreen,    pubscreen,
  347.                 TAG_DONE )))
  348.     return( 4L );
  349.  
  350.     GT_RefreshWindow( Project0Wnd, NULL );
  351.  
  352.     Project0Render();
  353.  
  354.     return( 0L );
  355. }
  356.  
  357. void CloseProject0Window( void )
  358. {
  359.     if ( Project0Wnd        ) {
  360.         CloseWindow( Project0Wnd );
  361.         Project0Wnd = NULL;
  362.     }
  363.  
  364.     if ( Project0GList      ) {
  365.         FreeGadgets( Project0GList );
  366.         Project0GList = NULL;
  367.     }
  368. }
  369.  
  370. int prefsgui(void) {
  371.  
  372.    ULONG class, code, iaddress, offx, offy;
  373.     struct IntuiMessage *msg2;
  374.  
  375.    exit_flag2=FALSE;
  376.  
  377.    SetupScreen();
  378.     adaptlanguage();
  379.  
  380.    OpenProject0Window();
  381.  
  382.    displevel(0);
  383.    drawspecial();
  384.    if(prefs.planguage > 0)
  385.       GT_SetGadgetAttrs(Project0Gadgets[GD_Lang],Project0Wnd,NULL,GTMX_Active,prefs.planguage-1,TAG_END);
  386.  
  387.    GT_SetGadgetAttrs(Project0Gadgets[GD_Just],Project0Wnd,NULL,GTMX_Active,prefs.just,TAG_END);
  388.    GT_SetGadgetAttrs(Project0Gadgets[GD_Time_Colour],Project0Wnd,NULL,GTSL_Level,prefs.time_col[0],TAG_END);
  389.    GT_SetGadgetAttrs(Project0Gadgets[GD_Date_Colour],Project0Wnd,NULL,GTSL_Level,prefs.date_col[0],TAG_END);
  390.    GT_SetGadgetAttrs(Project0Gadgets[GD_Check_Date],Project0Wnd,NULL,GTCB_Checked,prefs.date,TAG_END);
  391.    GT_SetGadgetAttrs(Project0Gadgets[GD_Check_Auto],Project0Wnd,NULL,GTCB_Checked,prefs.autoadjust,TAG_END);
  392.    GT_SetGadgetAttrs(Project0Gadgets[GD_Pub],Project0Wnd,NULL,GTST_String,prefs.pub,TAG_END);
  393.    GT_SetGadgetAttrs(Project0Gadgets[GD_Back],Project0Wnd,NULL,GTST_String,prefs.backdrop,TAG_END);
  394.    GT_SetGadgetAttrs(Project0Gadgets[GD_WinFront],Project0Wnd,NULL,GTCB_Checked,prefs.wtf,TAG_END);
  395.  
  396.     convertdate(prefs.events[1].timecode);
  397.     GT_SetGadgetAttrs(Project0Gadgets[GD_Time1],Project0Wnd,NULL,GTTX_Text,time1,TAG_END);
  398.     GT_SetGadgetAttrs(Project0Gadgets[GD_Time2],Project0Wnd,NULL,GTTX_Text,time2,TAG_END);
  399.     GT_SetGadgetAttrs(Project0Gadgets[GD_Msg],Project0Wnd,NULL,GTST_String,prefs.events[1].message,TAG_END);
  400.     GT_SetGadgetAttrs(Project0Gadgets[GD_Type],Project0Wnd,NULL,GTCY_Active,prefs.events[1].type,TAG_END);
  401.     GT_SetGadgetAttrs(Project0Gadgets[GD_Time_Set],Project0Wnd,NULL,GTSL_Level,prefs.events[1].timecode,TAG_END);
  402.     GT_SetGadgetAttrs(Project0Gadgets[GD_Enable],Project0Wnd,NULL,GTCB_Checked,prefs.events[1].used,TAG_END);
  403.     GT_SetGadgetAttrs(Project0Gadgets[GD_HotKey],Project0Wnd,NULL,GTST_String,prefs.hkey,TAG_END);
  404.     GT_SetGadgetAttrs(Project0Gadgets[GD_TalkKey],Project0Wnd,NULL,GTST_String,prefs.tkey,TAG_END);
  405.  
  406.     if(locale) GT_SetGadgetAttrs(Project0Gadgets[GD_Lang],Project0Wnd,NULL,GA_Disabled,TRUE,TAG_END);
  407.  
  408.     GT_SetGadgetAttrs(Project0Gadgets[GD_Accent],Project0Wnd,NULL,GTST_String,prefs.accent,TAG_END);
  409.    GT_RefreshWindow(Project0Wnd,NULL);                                      
  410.  
  411.    offx=Project0Wnd->BorderLeft-4;
  412.    offy=Project0Wnd->BorderTop-11;
  413.  
  414.    SetAPen(Project0Wnd->RPort,prefs.time_col[0]);
  415.    RectFill(Project0Wnd->RPort,241+offx,115+offy,299+offx,125+offy);
  416.    SetAPen(Project0Wnd->RPort,prefs.date_col[0]);
  417.    RectFill(Project0Wnd->RPort,241+offx,99+offy,299+offx,109+offy);
  418.    SetAPen(Project0Wnd->RPort,1);
  419.  
  420.    while(1) {
  421.       Wait(1<<Project0Wnd->UserPort->mp_SigBit);
  422.       while(msg2=(struct IntuiMessage *)GT_GetIMsg(Project0Wnd->UserPort)) {
  423.          class=msg2->Class;
  424.          code=msg2->Code;
  425.          iaddress=(ULONG)msg2->IAddress;
  426.          GT_ReplyIMsg(msg2);
  427.  
  428.          switch(class) {
  429.             case CLOSEWINDOW:
  430.                goto cleanup;
  431.             break;
  432.             case GADGETUP:
  433.             case GADGETDOWN:
  434.             case MOUSEMOVE:
  435.                if(!handlepgadgets(iaddress,code))
  436.                   goto cleanup;
  437.                if(exit_flag2)
  438.                   goto cleanup;
  439.             break;
  440.             default:
  441.                //msg("Unknown msg!");
  442.             break;
  443.          }
  444.       }
  445.    }
  446.  
  447. cleanup:
  448.  
  449.    CloseProject0Window();
  450.    CloseDownScreen();
  451.  
  452.    return;
  453. }
  454.  
  455. BOOL handlepgadgets(int iaddress, int code) {
  456.    struct Gadget *gad;
  457.    struct StringInfo *si;
  458.     char pub[139];
  459.     char *tmp=NULL;
  460.    int cols=2, i=0;
  461.    UWORD offx, offy;
  462.     
  463.     BPTR thandle;   /* temp handle */
  464.  
  465.    offx=Project0Wnd->BorderLeft-4;
  466.    offy=Project0Wnd->BorderTop-11;
  467.  
  468.    gad=(struct Gadget *)iaddress;
  469.    si=(struct StringInfo *)gad->SpecialInfo;
  470.  
  471.    switch(gad->GadgetID) {
  472.       case GD_ColourSlider:
  473.          current_mode=code;
  474.          displevel(code);
  475.          for(i=0; i<code; i++) {
  476.            cols=cols*2;
  477.          }
  478.          GT_SetGadgetAttrs(Project0Gadgets[GD_Time_Colour],Project0Wnd,NULL,GTSL_Max,(cols-1),GTSL_Level,prefs.time_col[code],TAG_END);
  479.          GT_SetGadgetAttrs(Project0Gadgets[GD_Date_Colour],Project0Wnd,NULL,GTSL_Max,(cols-1),GTSL_Level,prefs.date_col[code],TAG_END);
  480.          GT_RefreshWindow(Project0Wnd,NULL);
  481.  
  482.          SetAPen(Project0Wnd->RPort,prefs.time_col[code]);
  483.          RectFill(Project0Wnd->RPort,241+offx,115+offy,299+offx,125+offy);
  484.          SetAPen(Project0Wnd->RPort,prefs.date_col[code]);
  485.          RectFill(Project0Wnd->RPort,241+offx,99+offy,299+offx,109+offy);
  486.          SetAPen(Project0Wnd->RPort,1);
  487.  
  488.       break;
  489.       case GD_But_Use:
  490.          writeprefs();
  491.          exit_flag2=TRUE;
  492.          return(0);
  493.      break;
  494.       case GD_But_Cancel:
  495.          exit_flag2=TRUE;
  496.          return(0);
  497.       break;
  498.       case GD_Time_Colour:
  499.          SetAPen(Project0Wnd->RPort,code);
  500.          RectFill(Project0Wnd->RPort,241+offx,115+offy,299+offx,125+offy);
  501.          SetAPen(Project0Wnd->RPort,1);
  502.          prefs.time_col[current_mode]=code;
  503.       break;
  504.       case GD_Date_Colour:
  505.          SetAPen(Project0Wnd->RPort,code);
  506.          RectFill(Project0Wnd->RPort,241+offx,99+offy,299+offx,109+offy);
  507.          SetAPen(Project0Wnd->RPort,1);
  508.          prefs.date_col[current_mode]=code;
  509.       break;
  510.       case GD_Check_Date:
  511.          prefs.date=code;
  512.       break;
  513.         case GD_Pub_Get:
  514.             tmp=NULL;
  515.             tmp=publister();
  516.             if(tmp!=(char *)1234) {
  517.                 sprintf(pub,"%s",tmp);
  518.                 if(strcmp(pub,"")) {
  519.                     strcpy(prefs.pub,pub);
  520.                     GT_SetGadgetAttrs(Project0Gadgets[GD_Pub],Project0Wnd,NULL,GTST_String,prefs.pub,TAG_DONE);
  521.                     GT_RefreshWindow(Project0Wnd,NULL);
  522.                 }
  523.             }
  524.             break;
  525.       case GD_Check_Auto:
  526.          prefs.autoadjust=code;
  527.       break;
  528.         case GD_Date:
  529.             getdate();
  530.         break;
  531.       case GD_Lang:
  532.          prefs.planguage=(code+1);
  533.          language=code+1;
  534.       break;
  535.       case GD_Just:
  536.          prefs.just=code;
  537.       break;
  538.         case GD_WinFront:
  539.             prefs.wtf=code;
  540.         break;
  541.         case GD_Back:
  542.             strcpy(prefs.backdrop,si->Buffer);
  543.             thandle=Open(prefs.backdrop,MODE_OLDFILE);
  544.             if(!thandle) {
  545.                 DisplayBeep(NULL);
  546.                 strcpy(prefs.backdrop,"");
  547.                 GT_SetGadgetAttrs(Project0Gadgets[GD_Back],Project0Wnd,NULL,GTST_String,prefs.backdrop,TAG_END);
  548.             GT_RefreshWindow(Project0Wnd,NULL);
  549.             }
  550.             if(thandle) Close(thandle);
  551.         break;
  552.         case GD_Pub:
  553.             strcpy(prefs.pub,si->Buffer);
  554.          break;
  555.         case GD_Asl_Get:
  556.  
  557.             switch(language) {
  558.                 case ENGLISH:
  559.                 case FRENCH:
  560.                     tmp=callasl(Project0Wnd,"Pick a file for the backdrop",NULL);
  561.                 break;
  562.                 case SPANISH:
  563.                     tmp=callasl(Project0Wnd,"Elija una imagen cono fondo",NULL);
  564.                 break;
  565.                 default:
  566.                     tmp=callasl(Project0Wnd,"Pick a file for the backdrop",NULL);
  567.                 break;
  568.             }
  569.  
  570.             if(tmp) {
  571.                 sprintf(prefs.backdrop,"%s",tmp);
  572.                 thandle=Open(prefs.backdrop,MODE_OLDFILE);
  573.                 if(!thandle) {
  574.                     DisplayBeep(NULL);
  575.                     strcpy(prefs.backdrop,"");
  576.                     GT_SetGadgetAttrs(Project0Gadgets[GD_Back],Project0Wnd,NULL,GTST_String,prefs.backdrop,TAG_END);
  577.                 GT_RefreshWindow(Project0Wnd,NULL);
  578.                 }
  579.                 if(thandle) Close(thandle);    
  580.                 GT_SetGadgetAttrs(Project0Gadgets[GD_Back],Project0Wnd,NULL,GTST_String,prefs.backdrop,TAG_END);
  581.              GT_RefreshWindow(Project0Wnd,NULL);        
  582.             }
  583.         break;
  584.         case GD_A_Preset:
  585.             preset=code;
  586.             convertdate(prefs.events[preset].timecode);
  587.             GT_SetGadgetAttrs(Project0Gadgets[GD_Time1],Project0Wnd,NULL,GTTX_Text,time1,TAG_END);
  588.             GT_SetGadgetAttrs(Project0Gadgets[GD_Time2],Project0Wnd,NULL,GTTX_Text,time2,TAG_END);
  589.             GT_SetGadgetAttrs(Project0Gadgets[GD_Msg],Project0Wnd,NULL,GTST_String,prefs.events[preset].message,TAG_END);
  590.             GT_SetGadgetAttrs(Project0Gadgets[GD_Type],Project0Wnd,NULL,GTCY_Active,prefs.events[preset].type,TAG_END);
  591.             GT_SetGadgetAttrs(Project0Gadgets[GD_Time_Set],Project0Wnd,NULL,GTSL_Level,prefs.events[preset].timecode,TAG_END);
  592.             GT_SetGadgetAttrs(Project0Gadgets[GD_Enable],Project0Wnd,NULL,GTCB_Checked,prefs.events[preset].used,TAG_END);
  593.             GT_RefreshWindow(Project0Wnd,NULL);            
  594.         break;
  595.         case GD_Time_Set:
  596.             /* code 0 = It's just gone one o'clock (am) */
  597.             /* If code is even, It's Just gone
  598.                 if code is odd, Its nearly */
  599.             /* Reset */
  600.             prefs.events[preset].hours=0;
  601.             prefs.events[preset].minutes=0;
  602.             prefs.events[preset].timecode=code;
  603.  
  604.             convertdate(code);
  605.             
  606.             GT_SetGadgetAttrs(Project0Gadgets[GD_Time1],Project0Wnd,NULL,GTTX_Text,time1,TAG_END);
  607.             GT_SetGadgetAttrs(Project0Gadgets[GD_Time2],Project0Wnd,NULL,GTTX_Text,time2,TAG_END);
  608.  
  609.             GT_RefreshWindow(Project0Wnd,NULL);
  610.         break;
  611.         case GD_Type:
  612.             prefs.events[preset].type=code;
  613.             
  614.         break;
  615.         case GD_Msg:
  616.             strcpy(prefs.events[preset].message,si->Buffer);    
  617.         break;
  618.         case GD_Enable:
  619.             prefs.events[preset].used=code;
  620.         break;
  621.         case GD_GetParam:
  622.             strcpy(prefs.events[preset].message,callasl(Project0Wnd,"Select a file as a parameter for your event",NULL));
  623.             GT_SetGadgetAttrs(Project0Gadgets[GD_Msg],Project0Wnd,NULL,GTST_String,prefs.events[preset].message,TAG_END);
  624.             GT_RefreshWindow(Project0Wnd,NULL);
  625.  
  626.         break;
  627.         
  628.         case GD_Accent:
  629.             strcpy(prefs.accent,si->Buffer);
  630.             thandle=Open(prefs.accent,MODE_OLDFILE);
  631.             if(!thandle) {
  632.                 DisplayBeep(NULL);
  633.                 strcpy(prefs.accent,"");
  634.                 GT_SetGadgetAttrs(Project0Gadgets[GD_Accent],Project0Wnd,NULL,GTST_String,prefs.accent,TAG_END);
  635.             GT_RefreshWindow(Project0Wnd,NULL);
  636.             }
  637.             if(thandle) Close(thandle);
  638.         break;
  639.         case GD_GetAccent:
  640.             tmp=callasl(Project0Wnd,"Choose your accent","LOCALE:Accents");
  641.             if(tmp) {
  642.                 sprintf(prefs.accent,"%s",tmp);
  643.                 thandle=Open(prefs.accent,MODE_OLDFILE);
  644.                 if(!thandle) {
  645.                     DisplayBeep(NULL);
  646.                     strcpy(prefs.accent,"");
  647.                     GT_SetGadgetAttrs(Project0Gadgets[GD_Accent],Project0Wnd,NULL,GTST_String,prefs.accent,TAG_END);
  648.                 GT_RefreshWindow(Project0Wnd,NULL);
  649.                 }
  650.                 if(thandle) Close(thandle);    
  651.                 GT_SetGadgetAttrs(Project0Gadgets[GD_Accent],Project0Wnd,NULL,GTST_String,prefs.accent,TAG_END);
  652.              GT_RefreshWindow(Project0Wnd,NULL);        
  653.             }
  654.         break;
  655.         case GD_HotKey:
  656.             strcpy(prefs.hkey,si->Buffer);
  657.         break;
  658.         case GD_TalkKey:
  659.             strcpy(prefs.tkey,si->Buffer);
  660.         break;
  661.  
  662.  
  663.    }
  664.  
  665.    return(1);
  666. }
  667.  
  668. short displevel(int code) {
  669.    UWORD offx, offy;
  670.    int i=0, cols=2;
  671.    char text[5];
  672.  
  673.    offx=Project0Wnd->BorderLeft-4;
  674.    offy=Project0Wnd->BorderTop-11;
  675.  
  676.    for(i=0; i<code; i++) {
  677.       cols=cols*2;
  678.    }
  679.    sprintf(text,"%ld",cols);
  680.    level_text.IText=text;
  681.    SetAPen(Project0Wnd->RPort,0);
  682.    RectFill(Project0Wnd->RPort,293+offx,131+offy,320+offx,142+offy);
  683.    SetAPen(Project0Wnd->RPort,1);
  684.    PrintIText(Project0Wnd->RPort,&level_text,offx,offy);
  685.  
  686.    return(1);
  687. }
  688.  
  689. short drawspecial(void) {
  690.    UWORD offx, offy;
  691.  
  692.    offx=Project0Wnd->BorderLeft-4;
  693.    offy=Project0Wnd->BorderTop-11;
  694.  
  695.    /* Outline to time colour */
  696.  
  697.    Move(Project0Wnd->RPort,240+offx,98+offy);
  698.    Draw(Project0Wnd->RPort,300+offx,98+offy);
  699.  
  700.    Move(Project0Wnd->RPort,300+offx,98+offy);
  701.    Draw(Project0Wnd->RPort,300+offx,110+offy);
  702.  
  703.    Move(Project0Wnd->RPort,300+offx,110+offy);
  704.    Draw(Project0Wnd->RPort,240+offx,110+offy);
  705.  
  706.    Move(Project0Wnd->RPort,240+offx,110+offy);
  707.    Draw(Project0Wnd->RPort,240+offx,98+offy);
  708.  
  709.    /* Ouline to date colour */
  710.  
  711.    Move(Project0Wnd->RPort,240+offx,114+offy);
  712.    Draw(Project0Wnd->RPort,300+offx,114+offy);
  713.  
  714.    Move(Project0Wnd->RPort,300+offx,114+offy);
  715.    Draw(Project0Wnd->RPort,300+offx,126+offy);
  716.  
  717.    Move(Project0Wnd->RPort,300+offx,126+offy);
  718.    Draw(Project0Wnd->RPort,240+offx,126+offy);
  719.  
  720.    Move(Project0Wnd->RPort,240+offx,126+offy);
  721.    Draw(Project0Wnd->RPort,240+offx,114+offy);
  722.  
  723.    return(1);
  724. }
  725.  
  726. short writeprefs(void) {
  727.    int bytes;                         
  728.  
  729.    handle2=Open(PREFS_FILE,MODE_READWRITE);
  730.    if (!handle2) {
  731.       DisplayBeep(0L);
  732.       return(0); }
  733.  
  734.    /* First update the prefs structure */
  735.    prefs.vers=VERS; /* Current version of prefs file format */
  736.    strcpy(prefs.header,ID); /* Header */
  737.    prefs.x=win_p->LeftEdge;
  738.    prefs.y=win_p->TopEdge;
  739.    prefs.width=win_p->Width;
  740.    prefs.height=win_p->Height;
  741.    /* Note that the planguage element does not need to be updated */
  742.    bytes=FWrite(handle2,(char *)&prefs,1,sizeof(prefs));
  743.    if(bytes!=sizeof(prefs))
  744.       /* File was not written properly! */
  745.       DisplayBeep(NULL);
  746.  
  747.    Close(handle2);
  748.    return(0);
  749. }
  750.  
  751.  
  752. char *callasl(struct Window *win, char *title, char *initialdir) {
  753.     struct FileRequester *fr;
  754.     char buffer2[200];
  755.     struct TagItem tags[] = {
  756.         ASL_Hail,(ULONG)NULL,
  757.         ASL_Pattern,(ULONG)"#?",
  758.         ASL_FuncFlags,FILF_PATGAD,
  759.         ASL_Window,(ULONG)NULL,
  760.         ASL_Dir,(ULONG)NULL,
  761.         TAG_DONE
  762.     };
  763.  
  764.     if(!(AslBase=OpenLibrary("asl.library",0))) 
  765.         return(NULL);
  766.  
  767.     tags[0].ti_Data=(ULONG)title;
  768.     tags[3].ti_Data=(ULONG)win;
  769.     tags[4].ti_Data=(ULONG)initialdir;
  770.  
  771.     fr=(struct FileRequester *)AllocAslRequest(ASL_FileRequest,&tags[0]);
  772.     if(!fr) {
  773.         msg("Unable to open asl requester!");
  774.         CloseLibrary(AslBase);
  775.         return(0);
  776.     }
  777.  
  778.     if(!AslRequest(fr,NULL)) {
  779.         FreeAslRequest(fr);
  780.         CloseLibrary(AslBase);
  781.         return(0);
  782.     }
  783.  
  784.     sprintf(buffer,"%s",fr->rf_Dir);
  785.     sprintf(buffer2,"%s",fr->rf_File);
  786.  
  787.     if(buffer[strlen(buffer)-1]!=':' && buffer[strlen(buffer)-1]!='/' ) {
  788.         /* No device name nor trailing slash */
  789.         if(strcmp(buffer,"")) {
  790.             /* Make sure something is in there */
  791.             strcat(buffer,"/");
  792.         }
  793.     }
  794.  
  795.     strcat(buffer,buffer2);
  796.  
  797.  
  798.     FreeAslRequest(fr);
  799.  
  800.     CloseLibrary(AslBase);
  801.     return(&buffer[0]);
  802. }
  803.  
  804.  
  805. void adaptlanguage(void) {
  806.  
  807.     switch(language) {
  808.         case ENGLISH:
  809.         break;
  810.         case FRENCH:
  811.             Just0Labels[0]="Gauche";
  812.             Just0Labels[1]="Droit";
  813.             Just0Labels[2]="Centre";
  814.             Type0Labels[0]="Demander";
  815.             Type0Labels[1]="Bruit (IFF)";
  816.             Type0Labels[2]="Ordre (AmigaDOS)";
  817.             Type0Labels[3]="Parole";
  818.             Project0IText[0].IText="Langue";
  819.             Project0IText[1].IText="Justification";
  820.             Project0IText[2].IText="Réveille-matin:-";
  821.             Project0NGad[0].ng_GadgetText="Couleurs";
  822.             Project0NGad[1].ng_GadgetText="Sauver";
  823.             Project0NGad[2].ng_GadgetText="Emploi";
  824.             Project0NGad[3].ng_GadgetText="Couleur(date)";
  825.             Project0NGad[4].ng_GadgetText="Couleur(temp)";
  826.             Project0NGad[5].ng_GadgetText="Date ?";
  827.             Project0NGad[8].ng_GadgetText="Automatique";
  828.             Project0NGad[10].ng_GadgetText="écran (pub)"; 
  829.             Project0NGad[11].ng_GadgetText="Image";
  830.             Project0NGad[9].ng_GadgetText="Fenêtre á face";
  831.             Project0NGad[14].ng_GadgetText="Nombre";
  832.             Project0NGad[15].ng_GadgetText="Temps";
  833.             Project0NGad[18].ng_GadgetText="Type";
  834.             Project0NGad[19].ng_GadgetText="Texte";
  835.             Project0NGad[20].ng_GadgetText="Emploi cas?";
  836.             
  837.         
  838.         break;
  839.         case SPANISH:
  840.             Just0Labels[0]="A la Izquierdo";
  841.             Just0Labels[2]="A la Derecho";
  842.             Just0Labels[1]="Centrado";
  843.             Type0Labels[0]="Petición";
  844.             Type0Labels[1]="Sonido (IFF)";
  845.             Type0Labels[2]="Orden (AmigaDOS)";
  846.             Type0Labels[3]="Habla";    
  847.             Project0IText[0].IText="Lenguaje";
  848.             Project0IText[1].IText="Justificado Texto";
  849.             Project0IText[2].IText="Despertador";
  850.             Project0NGad[0].ng_GadgetText="Nº Colores";
  851.             Project0NGad[1].ng_GadgetText="Guardar";
  852.             Project0NGad[2].ng_GadgetText="Usar";
  853.             Project0NGad[3].ng_GadgetText="Color (Hora)";
  854.             Project0NGad[4].ng_GadgetText="Color (Fecha)";
  855.             Project0NGad[5].ng_GadgetText="Monstrar Fecha";
  856.             Project0NGad[8].ng_GadgetText="Auto Ajuste";
  857.             Project0NGad[10].ng_GadgetText="PantPública";
  858.             Project0NGad[11].ng_GadgetText="Imagen";
  859.             Project0NGad[9].ng_GadgetText="Primer Plano";
  860.             Project0NGad[14].ng_GadgetText="NÚmero";
  861.             Project0NGad[19].ng_GadgetText="Texto";
  862.             Project0NGad[20].ng_GadgetText="Suceso ?";
  863.             Project0NGad[21].ng_GadgetText="Fecha";
  864.             Project0NGad[15].ng_GadgetText="Tiempo";
  865.             Project0NGad[18].ng_GadgetText="Tipo";
  866.  
  867.             break;
  868.  
  869.     }
  870.  
  871. }
  872. void convertdate(int code) {
  873.     int tme,i,hours_count;
  874.     BOOL pm,odd=FALSE;
  875.  
  876.     tme=(code/2)*2;
  877.             if(code!=tme) 
  878.                 strcpy(time1,"Just gone ");
  879.             else {            
  880.                 strcpy(time1,"Nearly ");
  881.                 odd=TRUE;
  882.                 tme++;
  883.             };
  884.         hours_count=1;
  885.         while (tme > 24) {
  886.             tme=tme-24;
  887.             hours_count++;
  888.         }
  889.         if(hours_count==25) hours_count=1;        
  890.         tme=(tme/2)*5;
  891.         if(tme == 60) { tme=0; hours_count++; }
  892.  
  893.         pm=FALSE;
  894.         if(hours_count > 12) {
  895.             pm=TRUE;
  896.             hours_count+= - 12;
  897.         }
  898.         
  899.         if(hours_count == 12) {
  900.             if(pm) pm=FALSE; else pm=TRUE;
  901.         } 
  902.         if (tme !=0) strcat(time1,engnums[tme]);
  903.         prefs.events[preset].minutes=tme;
  904.         if(odd) prefs.events[preset].minutes+= -2;
  905.         
  906.         if (tme !=0) strcat(time1," ");
  907.         if (tme !=0) {
  908.             if(tme <= 30) 
  909.                 strcat(time1,"past ");
  910.             else {
  911.                 strcat(time1,"to ");
  912.             }
  913.         }
  914.         /* if(tme>30) prefs.events[preset].hours=hours_count+1;
  915.         else */
  916.         
  917.         prefs.events[preset].hours=hours_count;
  918.  
  919.         
  920.         if(prefs.events[preset].minutes==-2) {
  921.             prefs.events[preset].hours--;
  922.             prefs.events[preset].minutes=58;
  923.             if(prefs.events[preset].hours==-1) 
  924.                 prefs.events[preset].hours=23;
  925.         }
  926.         if(prefs.events[preset].hours==25)
  927.             prefs.events[preset].hours=0;
  928.     
  929.         if(tme>30 && hours_count==12) { 
  930.             hours_count=0;
  931.             prefs.events[preset].hours=0;
  932.         }
  933.     
  934.         if(hours_count==13) {
  935.             hours_count=1;
  936.             prefs.events[preset].hours=1;
  937.         }
  938.  
  939.         if(tme>30) strcat(time1,engnums[hours_count+1]);
  940.         else
  941.         strcat(time1,engnums[hours_count]);
  942.  
  943.         if(hours_count==11 && tme>30) {
  944.             if(pm) pm=FALSE;
  945.             else
  946.             pm=TRUE;
  947.         }
  948.  
  949.         if(!pm) {
  950.             if(hours_count==11) {
  951.                 if(tme >30) {
  952.                     prefs.events[preset].hours+=12;
  953.                 }
  954.                 if(hours_count==12) {
  955.                     prefs.events[preset].hours+=12;
  956.                 }
  957.             }
  958.         }
  959.         if(pm==0 && prefs.events[preset].hours==12) prefs.events[preset].hours=0;
  960.         if(pm) prefs.events[preset].hours+=12;
  961.  
  962.         if(prefs.events[preset].hours==25) prefs.events[preset].hours=1;
  963.         if(prefs.events[preset].hours==24) prefs.events[preset].hours=0;
  964.  
  965.  
  966.         
  967.         if(pm) strcat(time1," (pm)"); else strcat(time1," (am)");
  968.         
  969.         
  970.         switch(language) {
  971.             case ENGLISH:
  972.             break;
  973.  
  974.             case FRENCH:
  975.             strcpy(time1,""); /* Clear out English */
  976.             if(prefs.events[preset].hours>12) {
  977.                 pm=TRUE;
  978.                 prefs.events[preset].hours+=-12;
  979.             } else 
  980.                 pm=FALSE;
  981.  
  982.             tme=(prefs.events[preset].minutes/5)*5;
  983.  
  984.          if((prefs.events[preset].minutes-tme)>2)
  985.             strcat(time1,"Bientôt ");
  986.  
  987.          if(prefs.events[preset].minutes<=32) {
  988.             strcat(time1,engnums[prefs.events[preset].hours]);
  989.          }
  990.          else {
  991.              if(prefs.events[preset].hours==12) {
  992.                strcat(time1,engnums[1]); }
  993.             else {
  994.                  strcat(time1,engnums[prefs.events[preset].hours+1]);
  995.             }
  996.          }
  997.  
  998.          strcat(time1," heures");
  999.  
  1000.          if(prefs.events[preset].minutes>2 & prefs.events[preset].minutes<58) {
  1001.             strcat(time1," ");
  1002.             if(prefs.events[preset].minutes>32)
  1003.                   strcat(time1,"moins ");
  1004.  
  1005.             if((prefs.events[preset].minutes-tme)<=2) 
  1006.                strcat(time1,engnums[(prefs.events[preset].minutes/5)*5]); 
  1007.             else 
  1008.                strcat(time1,engnums[((prefs.events[preset].minutes/5)+1)*5]); 
  1009.          }
  1010.          if((prefs.events[preset].minutes-tme)<=2)
  1011.             strcat(time1," passées");
  1012.  
  1013.             if(pm) {
  1014.                 prefs.events[preset].hours+=12;
  1015.                 strcat(time1," (pm)");
  1016.             } else 
  1017.                 strcat(time1," (am)");
  1018.  
  1019.             break;
  1020.  
  1021.             case SPANISH:
  1022.                 strcpy(time1,""); /* Clear out English */
  1023.         
  1024.                 if(prefs.events[preset].hours>12) {
  1025.                     pm=TRUE;
  1026.                     prefs.events[preset].hours+=-12;
  1027.                 } else 
  1028.                     pm=FALSE;
  1029.  
  1030.                 if(odd) strcpy(time1,"Aproximadamente ");
  1031.                 tme=(prefs.events[preset].minutes/5)*5;
  1032.             if(prefs.events[preset].minutes<=32)
  1033.                strcat(time1,engnums[prefs.events[preset].hours]);
  1034.             else {
  1035.                if(prefs.events[preset].hours==12)
  1036.                   strcat(time1,engnums[1]);
  1037.                else
  1038.                   strcat(time1,engnums[prefs.events[preset].hours+1]);
  1039.             }
  1040.          if(prefs.events[preset].minutes>2 & prefs.events[preset].minutes<58) {
  1041.             if(prefs.events[preset].minutes<=32)
  1042.                strcat(time1," y");
  1043.             else
  1044.                strcat(time1," menos");
  1045.             strcat(time1," ");
  1046.             if((prefs.events[preset].minutes-tme)<=2) {
  1047.                strcat(time1,engnums[(prefs.events[preset].minutes/5)*5]); }
  1048.             else {
  1049.                strcat(time1,engnums[((prefs.events[preset].minutes/5)+1)*5]); }
  1050.          }
  1051.             if(pm) {
  1052.                 prefs.events[preset].hours+=12;
  1053.                 strcat(time1," (pm)");
  1054.             } else 
  1055.                 strcat(time1," (am)");
  1056.             break;
  1057.             default:
  1058.             break;
  1059.         }
  1060.  
  1061.     if(strlen(time1) > 23) {
  1062.             for(i=0; i<22; i++) {
  1063.                 time2[i]=time1[24+i];
  1064.             }
  1065.             time2[i+1]=0L;
  1066.         } else
  1067.             strcpy(time2,"");
  1068.  
  1069. }
  1070.  
  1071.  
  1072. /* The meaning of life is simple, its just that I can't think of it at the
  1073. moment. */
  1074.